<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:db="http://docbook.org/ns/docbook">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="Content-Style-Type" content="text/css" />
    <title>Závěrečná zpráva o práci</title>
  </head>
  <body>
        <h1>Závěrečná zpráva o práci</h1>
        <h2>Michael Šimáček  </h2>
    
        <p>Jako vedoucí týmu jsem měl za úkol rozdělování práce ostatním členům týmu a koordinaci jejich spolupráce.</p>
        <p></p>
        <p>Mým hlavním programátorským úkolem bylo specifikovat základní návrh tříd reprezentujících prvky XML Schematu a naprogramovat třídy schopné z jejich instancí vygenerovat cílové entitní třídy a parser. </p>
        <p>Prvotní návrh tříd a generování parseru stavěl na rozdělování elementů do objektů reprezentujících generované třídy a na používání XPath na straně parseru pro vybírání žádaných elementů. Tento návrh se ukázal jako nedostatečný, protože zachovával příliš málo informací o možném seskupení elementů v indikátorech (sequence, choice nebo all) a XPath nebyl vhodný pro vybírání prvků v sekvencích s atributem maxOccurs &gt; 1. Proto jsem návrh přepracoval do podoby, která mnohem více odpovídá struktuře samotného XML Schematu a na straně parseru používá sekvenční zpracování prvků prostřednictvím procházení uzlů DOM.</p>
        <p></p>
        <p>Každý komplexní typ ve schématu odpovídá instanci třídy <span style="font-family:monospace">ComplexType</span>, která je vždy kořenem stromu objektů, jehož nelistové uzly tvoří indikátory (sequence, choice nebo all) a listové uzly tvoří elementy a atributy. <span style="font-family:monospace">ComplexType</span> generuje třídu (nebo více tříd je-li potřeba) a informaci o jejích atributech získává ze svých podřízených uzlů. Každý z uzlů tohoto stromu je také schopen vygenerovat část kódu potřebnou k jeho parsování a vytváří tak hierarchii vnořených parsovacích bloků. Výsledkem je tedy pro každý komplexní typ jedna parsovací metoda starající se o nahrání dat do odpovídající třídy. Elementy a atributy mají svůj typ, kterým může být buďto odkaz na jednoduchý typ, výčtový typ (enum) nebo komplexní typ. Na komplexní typy není odkazováno přímo, ale přes odkazový objekt obsahující pouze jméno typu. Toto řešení jsem zvolil proto, aby se ve stromech nevyskytovaly cykly a zjednodušilo se parsování XSD, jelikož je na typ možné odkazovat, přestože nemusel být ještě zpracován. Tyto stromy typů jsou poté uloženy v obalující třídě <span style="font-family:monospace">Schema</span>, která je předána třídě <span style="font-family:monospace">ParserGenerator</span>, kterou jsem tvořil spolu s Romanem Lackem. Tato třída má na starosti vygenerovat výslednou třídu Parser, její hlavní tělo a volat generování parsovacích metod na instancích třídy <span style="font-family:monospace">ComplexType</span>.</p>
        <p></p>
        <p>Pro účely generování kódu jsem vytvořil třídu <span style="font-family:monospace">CodeBuilder</span>, která zapouzdřuje generování kódu, podporuje generování importů a automaticky podle přítomnosti složených závorek ve vkládaném kódu nastavuje odsazení, aby byl výsledný kód dobře čitelný. Současně disponuje pomocnými metodami pro konverzi jmen, které se vyskytují ve schématu, na jména odpovídající konvencím jazyka Java (camel-case).  Pokud by jméno po konverzi odpovídalo některému z rezervovaných klíčových slov Javy, doplní mu na konec podtržítko. Pro generování tříd jsem vytvořil pomocnou třídu <span style="font-family:monospace">ClassBuilder</span>, která obsahuje kód vložený pomocí <span style="font-family:monospace">CodeBuilderu</span> a atributy třídy reprezentované třídami implementujícími rozhranní <span style="font-family:monospace">Property</span>. Atributy nemohou být reprezentovány pouze pomocí řádků kódu odpovídajících jejich deklaraci, jelikož v určitých případech (zejména při používání choice) by mohlo dojít k jejich duplicitě. <span style="font-family:monospace">ClassBuilder</span> nakonec kompletní kód třídy, kterou reprezentuje, zapíše do souboru.</p>
        <p></p>
        <p>Mým posledním úkolem bylo udržování většiny projektové wiki.</p>
    </body>
</html>
